﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcadPos.Entity;
using System.Data;
using AcadPosApp.Utilidades;
using System.Web.Security;
using Microsoft.Reporting.WebForms;
using System.Globalization;

namespace AcadPosApp.Cadastros
{
    public partial class ControleDisciplinasPorProfessor : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregaAreasConhecimento();
                pnlPesquisa.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultar.ClientID + "')");
                pnlCadDiscProfessor.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultaProfissional.ClientID + "')");
                //txtCadPesqCoord.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultaCoord.ClientID + "')");
                carregaEstados();
                //carregaPolo();
                ddlEstadoPesquisa.SelectedValue = "1";
                carregaPolo();
            }
        }

        private void carregaAreasConhecimento()
        {
            AreaConhecimento area = new AreaConhecimento();
            area.Descricao = string.Empty;
            ddlAreaConhecimento.DataSource = ControlClass.CNAreaConhecimento.listarAreaConhecimento(area);
            ddlAreaConhecimento.DataTextField = "DESCRICAO";
            ddlAreaConhecimento.DataValueField = "ID_AREA_CONHECIMENTO";
            ddlAreaConhecimento.DataBind();
        }

        private void carregaEstados()
        {
            ddlEstadoPesquisa.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstadoPesquisa.DataTextField = "ESTADO";
            ddlEstadoPesquisa.DataValueField = "ID_ESTADO";
            ddlEstadoPesquisa.DataBind();
        }

        private void carregaEstadosCadCronograma()
        {
            ddlEstadoCadCrono.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstadoCadCrono.DataTextField = "ESTADO";
            ddlEstadoCadCrono.DataValueField = "ID_ESTADO";
            ddlEstadoCadCrono.DataBind();
        }

        private void carregaPoloCadCrono()
        {
            Polo polo = new Polo();
            polo.IdEstado = Convert.ToInt32(ddlEstadoCadCrono.SelectedValue);
            DataTable dt = ControlClass.CNPolo.listaPolosEstado(polo);
            ddlPoloCadCrono.DataSource = dt;
            ddlPoloCadCrono.DataTextField = "DESCRICAO";
            ddlPoloCadCrono.DataValueField = "ID_POLO";
            ddlPoloCadCrono.DataBind();
            if (dt.Rows.Count > 0)
            {
                ddlPoloCadCrono.Enabled = true;
            }
            else
                ddlPoloCadCrono.Enabled = false;
        }


        private void carregaPolo()
        {
            Polo polo = new Polo();
            polo.IdEstado = Convert.ToInt32(ddlEstadoPesquisa.SelectedValue);
            DataTable dt = ControlClass.CNPolo.listaPolosEstado(polo);
            ddlPoloPesquisa.DataSource = dt;
            ddlPoloPesquisa.DataTextField = "DESCRICAO";
            ddlPoloPesquisa.DataValueField = "ID_POLO";
            ddlPoloPesquisa.DataBind();
            if (dt.Rows.Count > 0)
            {
                ddlPoloPesquisa.Enabled = true;
            }
            else
                ddlPoloPesquisa.Enabled = false;
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            carregaGridPesquisa();
            ddlCurriculoPesquisa.Enabled = false;
            ddlCurriculoPesquisa.Items.Clear();
            gvwPesquisaTurmas.Visible = false;
            if (gvwPesquisa.Rows.Count > 0)
            {
                gvwPesquisa.SelectedIndex = 0;
                carregaCurriculosCurso();
                gvwPesquisaTurmas.Visible = false;
            }
        }

        private void carregaGridPesquisa()
        {
            gvwPesquisa.Visible = true;
            Curso curso = new Curso();
            curso.Descricao = txtPesquisa.Text;
            curso.IdAreaConhecimento = Convert.ToInt32(ddlAreaConhecimento.SelectedValue);
            gvwPesquisa.DataSource = ControlClass.CNCurso.listarCursos(curso);
            gvwPesquisa.DataBind();
            gvwPesquisa.SelectedIndex = -1;
        }

        protected void gvwPesquisa_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisa.PageIndex = e.NewPageIndex;
            carregaGridPesquisa();
        }

        protected void gvwPesquisa_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[4].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[4].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[4].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[4].Visible = false;
            }
            #endregion
        }

        protected void ddlAreaConhecimento_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvwPesquisa.Visible = false;
            ddlCurriculoPesquisa.Enabled = false;
            ddlCurriculoPesquisa.Items.Clear();
            gvwPesquisaTurmas.Visible = false;
        }

        protected void gvwPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaCurriculosCurso();
            gvwPesquisaTurmas.Visible = false;
        }

        private void carregaCurriculosCurso()
        {
            ddlCurriculoPesquisa.Enabled = true;
            Curriculo curriculo = new Curriculo();
            curriculo.IdCurso = Convert.ToInt32(gvwPesquisa.SelectedValue);
            DataTable dt = ControlClass.CNCurriculo.listaCurriculoPorCurso(curriculo);
            ddlCurriculoPesquisa.DataSource = dt;
            ddlCurriculoPesquisa.DataTextField = "COD_CURRICULO_SITUACAO";
            ddlCurriculoPesquisa.DataValueField = "ID_CURRICULO";
            ddlCurriculoPesquisa.DataBind();
            if (dt.Rows.Count <= 0)
            {
                ddlCurriculoPesquisa.Enabled = false;
                ddlCurriculoPesquisa.Items.Clear();
            }
        }

        protected void ddlEstadoPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaPolo();
            gvwPesquisaTurmas.Visible = false;
            pnlCadDiscProfessor.Visible = false;
            pnlDiscProfessor.Visible = false;
            pnlCronogramaDisciplinas.Visible = false;
            pnlValorTitulacao.Visible = false;
        }

        protected void ddlCurriculoPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvwPesquisaTurmas.Visible = false;
            pnlCadDiscProfessor.Visible = false;
            pnlDiscProfessor.Visible = false;
            pnlCronogramaDisciplinas.Visible = false;
            pnlValorTitulacao.Visible = false;
        }

        protected void btnConsultarTurmas_Click(object sender, EventArgs e)
        {
            gvwPesquisaTurmas.Visible = true;
            carregaTurmas();
        }

        private void carregaTurmas()
        {
            if (gvwPesquisa.SelectedIndex > -1 && ddlCurriculoPesquisa.SelectedValue != "")
            {
                Turma turma = new Turma();
                turma.IdCurriculo = Convert.ToInt32(ddlCurriculoPesquisa.SelectedValue);
                turma.IdPolo = Convert.ToInt32(ddlPoloPesquisa.SelectedValue);
                gvwPesquisaTurmas.DataSource = ControlClass.CNTurma.listaTurmas(turma);
                gvwPesquisaTurmas.DataBind();
                gvwPesquisaTurmas.SelectedIndex = -1;
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione um curso e em seguida um currículo!")), true);
            }
        }

        protected void gvwPesquisaTurmas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisaTurmas.PageIndex = e.NewPageIndex;
            carregaTurmas();
        }

        protected void gvwPesquisaTurmas_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //ImageButton l = (ImageButton)e.Row.FindControl("EXCLUIR");
                //l.CommandArgument = e.Row.RowIndex.ToString();

                //ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                //button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwPesquisaTurmas_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[10].Visible = true;
                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[10].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[10].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[10].Visible = false;
            }
            #endregion
        }

        protected void ddlPoloPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            gvwPesquisaTurmas.Visible = false;
            pnlCadDiscProfessor.Visible = false;
            pnlDiscProfessor.Visible = false;
            pnlCronogramaDisciplinas.Visible = false;
            pnlValorTitulacao.Visible = false;
        }


        protected void gvwDiscProfessor_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwDiscProfessor.PageIndex = e.NewPageIndex;
            carregaDiscProfessor();
        }

        protected void gvwPesquisaTurmas_SelectedIndexChanged(object sender, EventArgs e)
        {
            pnlDiscProfessor.Visible = true;
            carregaDiscProfessor();
        }

        private void carregaDiscProfessor()
        {
            Turma turma = new Turma();
            turma.IdTurma = Convert.ToInt32(gvwPesquisaTurmas.DataKeys[gvwPesquisaTurmas.SelectedIndex]["ID_TURMA"].ToString());
            gvwDiscProfessor.DataSource = ControlClass.CNDisciplina.listaDisciplinasProfessor(turma);
            gvwDiscProfessor.DataBind();
            gvwDiscProfessor.SelectedIndex = -1;
        }

        protected void gvwProfissionais_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[3].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[3].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[3].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[3].Visible = false;
            }
            #endregion
        }

        protected void gvwProfissionais_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwProfissionais.PageIndex = e.NewPageIndex;
            carregarProfissionais();
        }

        protected void btnInserir_Click(object sender, EventArgs e)
        {
            if (gvwDiscProfessor.SelectedIndex > -1)
            {
                if (gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[5].Text.ToString() == "" || gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[5].Text.ToString() == "&nbsp;")
                {
                    pnlPesquisa.Enabled = false;
                    pnlDiscProfessor.Enabled = false;
                    pnlCadDiscProfessor.Visible = true;
                    lblDisciplina.Text = gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[3].Text.ToString();
                    ddlDropTitulacao.Items.Clear();
                    ddlDropTitulacao.Enabled = false;
                    txtPesqProfissional.Text = string.Empty;
                    gvwProfissionais.Visible = false;
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "O docente para essa disciplina já foi cadastrado!")), true);
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione uma disciplina!")), true);
            }
        }

        protected void btnConsultaProfissional_Click(object sender, EventArgs e)
        {
            carregarProfissionais();
        }

        private void carregarProfissionais()
        {
            int idDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_DISCIPLINA"].ToString());
            gvwProfissionais.Visible = true;
            gvwProfissionais.DataSource = ControlClass.CNDisciplina.listaProfessorAptosDisc(idDisciplina, txtPesqProfissional.Text);
            gvwProfissionais.DataBind();
            gvwProfissionais.SelectedIndex = -1;
        }

        protected void gvwProfissionais_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregarTitulacoes();
        }

        private void carregaCronogramaDisciplina()
        {
            string prof = gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[5].Text.ToString();
            if (prof != "" && prof != "&nbsp;")
            {
                pnlCronogramaDisciplinas.Visible = true;
                gvwCronogramaDisciplina.Visible = true;
                int idProfDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                gvwCronogramaDisciplina.DataSource = ControlClass.CNDisciplina.listaCronograma(idProfDisciplina);
                gvwCronogramaDisciplina.DataBind();
            }
            else
            {

                pnlCronogramaDisciplinas.Visible = true;
                gvwCronogramaDisciplina.Visible = true;

                gvwCronogramaDisciplina.DataSource = null;
                gvwCronogramaDisciplina.DataBind();
            }
        }



        private void carregarTitulacoes()
        {
            int pCodProfissional = Convert.ToInt32(gvwProfissionais.SelectedDataKey["ID_PROFISSIONAL"]);
            DataTable dt = ControlClass.CNProfissional.getTitulacoes(pCodProfissional);
            ddlDropTitulacao.DataSource = dt;
            ddlDropTitulacao.DataTextField = "NIVEL";
            ddlDropTitulacao.DataValueField = "ID_PROFISSIONAL_TITULACAO";
            ddlDropTitulacao.DataBind();
            ddlDropTitulacao.Enabled = true;
            if (dt.Rows.Count <= 0)
            {
                ddlDropTitulacao.Enabled = false;
                ddlDropTitulacao.Items.Clear();
            }
        }

        protected void btnConfirmarDiscProfessor_Click(object sender, EventArgs e)
        {
            ProfissionalDisciplina profDisc = new ProfissionalDisciplina();
            string usuario = User.Identity.Name;
            profDisc.IdProfissionalTitulacao = Convert.ToInt32(ddlDropTitulacao.SelectedValue);
            profDisc.IdProfissional = Convert.ToInt32(gvwProfissionais.DataKeys[gvwProfissionais.SelectedIndex]["ID_PROFISSIONAL"].ToString());
            profDisc.IdTurma = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_TURMA"].ToString());
            profDisc.IdMatrizCurricular = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_MATRIZ_CURRICULAR"].ToString());
            profDisc.IdDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_DISCIPLINA"].ToString());
            int qtdDisc = gvwDiscProfessor.Rows.Count;
            try
            {
                string resposta = ControlClass.CNDisciplina.inserirDiscProfessor(profDisc, qtdDisc, usuario);
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, resposta)), true);
                if (resposta.Contains("sucesso"))
                {
                    pnlCadDiscProfessor.Visible = false;
                    pnlDiscProfessor.Enabled = true;
                    pnlPesquisa.Enabled = true;
                    carregaDiscProfessor();
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                }
            }
            catch
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
            }

        }

        protected void btnCancelarDiscProfessor_Click(object sender, EventArgs e)
        {
            pnlCadDiscProfessor.Visible = false;
            pnlDiscProfessor.Enabled = true;
            pnlPesquisa.Enabled = true;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            pnlDiscProfessor.Visible = false;
            gvwPesquisaTurmas.SelectedIndex = -1;
            pnlCronogramaDisciplinas.Visible = false;
        }

        protected void gvwDiscProfessor_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton l = (ImageButton)e.Row.FindControl("EXCLUIR");
                l.CommandArgument = e.Row.RowIndex.ToString();
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Button l = (Button)e.Row.FindControl("btnReceberDiario");
                l.CommandArgument = e.Row.RowIndex.ToString();
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Button l = (Button)e.Row.FindControl("btnDeclaracao");
                l.CommandArgument = e.Row.RowIndex.ToString();
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Button l = (Button)e.Row.FindControl("btnRecibo");
                l.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwDiscProfessor_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName == "Excluir")
                {
                    ProfissionalDisciplina profDisc = new ProfissionalDisciplina();
                    string usuario = User.Identity.Name;
                    int index = int.Parse((String)e.CommandArgument);
                    profDisc.IdProfissionalDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[index]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                    pnlCadDiscProfessor.Visible = false;
                    profDisc = ControlClass.CNDisciplina.carregarDadosProfDisciplina(profDisc.IdProfissionalDisciplina);

                    if (ControlClass.CNDisciplina.excluirDiscProfessor(profDisc, usuario))
                    {
                        profDisc = ControlClass.CNDisciplina.carregarDadosProfDisciplina(profDisc.IdProfissionalDisciplina);

                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        pnlCadDiscProfessor.Visible = false;
                        carregaDiscProfessor();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                    }
                }

                if (e.CommandName == "ReceberDiario")
                {
                    int index = int.Parse((String)e.CommandArgument);
                    int idProfDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[index]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                    if (ControlClass.CNDisciplina.receberDiario(idProfDisciplina))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "Recepção do diário realizada com sucesso!")), true);
                        pnlCadDiscProfessor.Visible = false;
                        carregaDiscProfessor();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                    }
                }
                if (e.CommandName == "Declaracao")
                {
                    int index = int.Parse((String)e.CommandArgument);
                    geraDeclaracaoRelatorio(index);
                }
                if (e.CommandName == "Recibo")
                {
                    if (Roles.IsUserInRole("Financeiro"))
                    {
                        int index = int.Parse((String)e.CommandArgument);
                        geraReciboRelatorio(index);
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Somente o financeiro pode imprimir recibo.")), true);
                    }
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK_TB_CRONOGRAMA_TB_PROFISSIONAL_DISCIPLINA"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroChaveEstrangeira, "Essa disciplina já tem cronograma. O professor não pode ser excluído.")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);

            }
        }

        protected void gvwDiscProfessor_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }

                        Button buttonReceberDiario = control as Button;
                        if (buttonReceberDiario != null && buttonReceberDiario.CommandName == "ReceberDiario")
                        {
                            // Adicionando a mensagem javascript
                            buttonReceberDiario.OnClientClick = "return ShowConfirm('Confirma o recebimento do diário?', '" + buttonReceberDiario.ClientID + "');";
                        }
                    }
                }
                if (e.Row.Cells[5].Text.ToString() == "" || e.Row.Cells[5].Text.ToString() == "&nbsp;")
                {
                    e.Row.Cells[2].Enabled = false;
                    e.Row.Cells[1].Enabled = false;
                    e.Row.Cells[7].Enabled = false;
                }
            }
        }

        protected void btnValorTitulacao_Click(object sender, EventArgs e)
        {

            if (gvwDiscProfessor.SelectedIndex > -1)
            {
                if (gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[5].Text.ToString() != "" && gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[5].Text.ToString() != "&nbsp;")
                {
                    if (Roles.IsUserInRole("Financeiro"))
                    {
                        txtValor.Text = string.Empty;
                        pnlCadDiscProfessor.Visible = false;
                        pnlValorTitulacao.Visible = true;
                        pnlPesquisa.Enabled = false;
                        pnlDiscProfessor.Enabled = false;
                        lblDisciplinaVlTitulacao.Text = gvwDiscProfessor.Rows[gvwDiscProfessor.SelectedIndex].Cells[3].Text.ToString();
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Somente o financeiro pode cadastrar valores de titulação.")), true);
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Insira primeiramente um docente para incluir o valor da titulação.")), true);
                }
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione uma disciplina!")), true);
            }

        }

        protected void btnCancelarValorTitulacao_Click(object sender, EventArgs e)
        {
            pnlCadDiscProfessor.Visible = false;
            pnlValorTitulacao.Visible = false;
            pnlPesquisa.Enabled = true;
            pnlDiscProfessor.Enabled = true;
        }

        protected void btnConfirmarValorTitulacao_Click(object sender, EventArgs e)
        {
            try
            {
                ProfissionalDisciplina profDisc = new ProfissionalDisciplina();
                profDisc.Valor = Convert.ToDecimal(txtValor.Text);
                profDisc.IdProfissionalDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                if (Roles.IsUserInRole("Financeiro"))
                {

                    if (ControlClass.CNDisciplina.inserirValorTitulacao(profDisc))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregaDiscProfessor();
                        pnlCadDiscProfessor.Visible = false;
                        pnlValorTitulacao.Visible = false;
                        pnlPesquisa.Enabled = true;
                        pnlDiscProfessor.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "Somente o financeiro pode cadastrar valores de titulação.")), true);
                }
            }
            catch
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
            }
        }

        protected void gvwDiscProfessor_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaCronogramaDisciplina();
        }

        protected void gvwCronogramaDisciplina_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwCronogramaDisciplina.PageIndex = e.NewPageIndex;
            carregaCronogramaDisciplina();
        }

        protected void btnLiberarBloquear_Click(object sender, EventArgs e)
        {
            //if (Roles.IsUserInRole("Coordenação Geral"))
            {
                int qtdDiscAlteradas = 0;
                string msg = string.Empty;
                try
                {
                    int idProfissionalDisciplina = 0;
                    string liberar_matricula = "";
                    foreach (GridViewRow row in gvwDiscProfessor.Rows)
                    {
                        CheckBox ckh = (CheckBox)row.FindControl("CheckBox1");
                        if (ckh.Checked)
                        {
                            if (gvwDiscProfessor.DataKeys[row.RowIndex]["LIBERAR_MATRICULA"].ToString() == "S")
                                liberar_matricula = "N";
                            else
                                liberar_matricula = "S";
                            idProfissionalDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[row.RowIndex]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                            if (ControlClass.CNDisciplina.liberarBloquearDisciplina(idProfissionalDisciplina, liberar_matricula))
                            {
                                qtdDiscAlteradas++;
                                carregaDiscProfessor();
                            }
                        }
                    }

                    if (qtdDiscAlteradas == 1)
                    {
                        msg = "Disciplina alterada com sucesso!";
                    }
                    else if (qtdDiscAlteradas > 1)
                    {
                        msg = "Disciplinas alteradas com sucesso!";
                    }
                    else
                    {
                        msg = "Nenhuma Disciplina foi liberada/bloqueada! Selecione pelo menos uma disciplina!";
                    }
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, msg)), true);
                }
                catch
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, string.Empty)), true);
                }
            }
            //else
            //{
            //    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Somente a coordenação geral pode bloquear/liberar disciplinas.")), true);
            //}
        }

        protected void btnCadCronograma_Click(object sender, EventArgs e)
        {
            if (gvwDiscProfessor.SelectedIndex > -1)
            {
                pnlCadastroCronograma.Visible = true;
                carregaEstadosCadCronograma();
                ddlEstadoCadCrono.SelectedValue = "1";
                carregaPoloCadCrono();
                pnlCadDiscProfessor.Visible = false;
                pnlValorTitulacao.Visible = false;
                pnlPesquisa.Enabled = false;
                pnlDiscProfessor.Enabled = false;
            }
            else
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione uma disciplina para cadastrar Cronograma.")), true);
            }
        }

        protected void ddlEstadoCadCrono_SelectedIndexChanged(object sender, EventArgs e)
        {
            carregaPoloCadCrono();
            gvwCadCalendario.Visible = false;
            ddlMesCadCrono.SelectedValue = "";
        }

        protected void ddlMesCadCrono_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlMesCadCrono.SelectedValue != "")
            {
                carregaCalendarioCronoProfDisc();
            }
        }

        private void carregaCalendarioCronoProfDisc()
        {
            int mes = Convert.ToInt32(ddlMesCadCrono.SelectedValue);
            int polo = Convert.ToInt32(ddlPoloCadCrono.SelectedValue);
            gvwCadCalendario.Visible = true;
            gvwCadCalendario.DataSource = ControlClass.CNCalendario.listarCalendario(polo, mes);
            gvwCadCalendario.DataBind();
        }

        protected void btnConfirmarCadCronograma_Click(object sender, EventArgs e)
        {
            try
            {
                if (gvwCadCalendario.SelectedIndex > -1 && gvwDiscProfessor.SelectedIndex > -1)
                {
                    int idProfissionalDisciplina = Convert.ToInt32(gvwDiscProfessor.DataKeys[gvwDiscProfessor.SelectedIndex]["ID_PROFISSIONAL_DISCIPLINA"].ToString());
                    int idCalendarioHorario = Convert.ToInt32(gvwCadCalendario.DataKeys[gvwCadCalendario.SelectedIndex]["ID_CALENDARIO_HORARIO"].ToString());

                    if (ControlClass.CNCalendario.inserirCronograma(idProfissionalDisciplina, idCalendarioHorario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        carregaCronogramaDisciplina();
                        pnlCadastroCronograma.Visible = false;
                        pnlCadDiscProfessor.Visible = false;
                        pnlValorTitulacao.Visible = false;
                        pnlPesquisa.Enabled = true;
                        pnlDiscProfessor.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroSimples, "Selecione um dia/horário.")), true);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("IX_TB_CRONOGRAMA"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Esse dia e horário já foram inseridos.")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
            }
        }

        protected void btnCancelarCadCronograma_Click(object sender, EventArgs e)
        {
            pnlCadastroCronograma.Visible = false;
            pnlCadDiscProfessor.Visible = false;
            pnlValorTitulacao.Visible = false;
            pnlPesquisa.Enabled = true;
            pnlDiscProfessor.Enabled = true;
        }

        private void geraDeclaracaoRelatorio(int index)
        {
            try
            {
                //DataTable dtImp = ControlClass.CNMatricula.listaDisciplinasMatriculadasPorAluno(matricula);

                //if (dtImp.Rows.Count == 0)
                //{
                //    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('Não há registros à serem impressos!', function() {});", true);
                //}
                //else
                //{
                ReportViewer ReportViewer1 = new ReportViewer();
                ReportViewer1.Reset();
                ReportViewer1.ProcessingMode = ProcessingMode.Local;
                ReportViewer1.LocalReport.ReportPath = Server.MapPath(@"~/Relatorios/relDeclaracaoAula.rdlc");
                ReportViewer1.LocalReport.DataSources.Clear();



                string cpf = gvwDiscProfessor.DataKeys[index]["CPF"].ToString();
                string cpfformatado = Convert.ToUInt64(cpf).ToString(@"000\.000\.000\-00");
                string docente = gvwDiscProfessor.Rows[index].Cells[5].Text.ToString();
                string RG = gvwDiscProfessor.DataKeys[index]["RG"].ToString();
                string curso = gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[2].Text.ToString();
                string modulo = gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[2].Text.ToString();
                string turma = gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[3].Text.ToString();
                string disciplina = gvwDiscProfessor.Rows[index].Cells[3].Text.ToString();
                string cargaHoraria = gvwDiscProfessor.DataKeys[index]["CH_DISCIPLINA"].ToString();
                string periodo = gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[6].Text.ToString() + " à " + gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[7].Text.ToString(); ;
                string mesExtenso = new DateTime(1900, DateTime.Now.Month, 1).ToString("MMMM", new CultureInfo("pt-BR"));

                ReportParameter rp_mes = new ReportParameter("rp_mes", Server.HtmlDecode(mesExtenso));
                ReportParameter rp_cpf = new ReportParameter("rp_cpf", Server.HtmlDecode(cpfformatado));
                ReportParameter rp_docente = new ReportParameter("rp_docente", Server.HtmlDecode(docente));
                ReportParameter rp_RG = new ReportParameter("rp_RG", Server.HtmlDecode(RG));
                ReportParameter rp_curso = new ReportParameter("rp_curso", Server.HtmlDecode(curso));
                ReportParameter rp_modulo = new ReportParameter("rp_modulo", Server.HtmlDecode(modulo));
                ReportParameter rp_turma = new ReportParameter("rp_turma", Server.HtmlDecode(turma));
                ReportParameter rp_disciplina = new ReportParameter("rp_disciplina", Server.HtmlDecode(disciplina));
                ReportParameter rp_cargaHoraria = new ReportParameter("rp_cargaHoraria", Server.HtmlDecode(cargaHoraria));
                ReportParameter rp_periodo = new ReportParameter("rp_periodo", Server.HtmlDecode(periodo));
                
                ReportParameter[] ReportParans = new ReportParameter[] {rp_mes, rp_cpf, rp_docente, rp_RG, rp_curso, rp_modulo, rp_turma, rp_disciplina, rp_cargaHoraria, rp_periodo };   //, rp_chCurso};

                ReportViewer1.LocalReport.SetParameters(ReportParans);

                //ReportDataSource rds1 = new ReportDataSource();
                //rds1.Name = "DataSet1";
                //rds1.Value = dtImp;

                ReportDataSource rds2 = new ReportDataSource();
                rds2.Name = "DataSet2";
                rds2.Value = ControlClass.CNParametros.getCabecalhoRelatorio();

                ReportViewer1.LocalReport.DataSources.Clear();
                //ReportViewer1.LocalReport.DataSources.Add(rds1);
                ReportViewer1.LocalReport.DataSources.Add(rds2);
                ReportViewer1.LocalReport.Refresh();

                #region Gerar PDF
                Warning[] warn = null;
                string[] streamids = null;
                string mimeType = "application/pdf";
                string encoding = string.Empty;
                string extension = string.Empty;
                byte[] byteViewer;

                byteViewer = ReportViewer1.LocalReport.Render("pdf", null, out mimeType, out encoding, out extension, out streamids, out warn);
                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment; filename=Declaracao.pdf");
                Response.BinaryWrite(byteViewer);
                Response.Flush();

                Response.End();
                Response.ClearContent();
                #endregion
                //}
            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('Falha ao tentar gerar o relatório. Tente novamente!', function() {});", true);
            }
        }

        private void geraReciboRelatorio(int index)
        {
            try
            {
                //DataTable dtImp = ControlClass.CNMatricula.listaDisciplinasMatriculadasPorAluno(matricula);

                //if (dtImp.Rows.Count == 0)
                //{
                //    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('Não há registros à serem impressos!', function() {});", true);
                //}
                //else
                //{
                ReportViewer ReportViewer1 = new ReportViewer();
                ReportViewer1.Reset();
                ReportViewer1.ProcessingMode = ProcessingMode.Local;
                ReportViewer1.LocalReport.ReportPath = Server.MapPath(@"~/Relatorios/relRecibo.rdlc");
                ReportViewer1.LocalReport.DataSources.Clear();



                string cpf = gvwDiscProfessor.DataKeys[index]["CPF"].ToString();
                string cpfformatado = Convert.ToUInt64(cpf).ToString(@"000\.000\.000\-00");
                string docente = gvwDiscProfessor.Rows[index].Cells[5].Text.ToString();
                string RG = gvwDiscProfessor.DataKeys[index]["RG"].ToString();
                string curso = gvwPesquisa.Rows[gvwPesquisa.SelectedIndex].Cells[2].Text.ToString();
                string modulo = gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[2].Text.ToString();
                string turma = gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[3].Text.ToString();
                string disciplina = gvwDiscProfessor.Rows[index].Cells[3].Text.ToString();
                string cargaHoraria = gvwDiscProfessor.DataKeys[index]["CH_DISCIPLINA"].ToString();
                string periodo = gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[6].Text.ToString() + " à " + gvwPesquisaTurmas.Rows[gvwPesquisaTurmas.SelectedIndex].Cells[7].Text.ToString(); ;
                string mesExtenso = new DateTime(1900, DateTime.Now.Month, 1).ToString("MMMM", new CultureInfo("pt-BR"));
                string valor = gvwDiscProfessor.DataKeys[index]["valor_titulacao"].ToString();
                string valorTotal = (Convert.ToDecimal(valor) * Convert.ToInt32(cargaHoraria)).ToString();

                ReportParameter rp_mes = new ReportParameter("rp_mes", Server.HtmlDecode(mesExtenso));
                ReportParameter rp_cpf = new ReportParameter("rp_cpf", Server.HtmlDecode(cpfformatado));
                ReportParameter rp_docente = new ReportParameter("rp_docente", Server.HtmlDecode(docente));
                ReportParameter rp_RG = new ReportParameter("rp_RG", Server.HtmlDecode(RG));
                ReportParameter rp_curso = new ReportParameter("rp_curso", Server.HtmlDecode(curso));
                ReportParameter rp_modulo = new ReportParameter("rp_modulo", Server.HtmlDecode(modulo));
                ReportParameter rp_turma = new ReportParameter("rp_turma", Server.HtmlDecode(turma));
                ReportParameter rp_disciplina = new ReportParameter("rp_disciplina", Server.HtmlDecode(disciplina));
                ReportParameter rp_cargaHoraria = new ReportParameter("rp_cargaHoraria", Server.HtmlDecode(cargaHoraria));
                ReportParameter rp_periodo = new ReportParameter("rp_periodo", Server.HtmlDecode(periodo));
                ReportParameter rp_valorTotal = new ReportParameter("rp_valorTotal", Server.HtmlDecode("R$ " + valorTotal));

                ReportParameter[] ReportParans = new ReportParameter[] { rp_valorTotal, rp_mes, rp_cpf, rp_docente, rp_RG, rp_curso, rp_modulo, rp_turma, rp_disciplina, rp_cargaHoraria, rp_periodo };   //, rp_chCurso};

                ReportViewer1.LocalReport.SetParameters(ReportParans);

                //ReportDataSource rds1 = new ReportDataSource();
                //rds1.Name = "DataSet1";
                //rds1.Value = dtImp;

                ReportDataSource rds2 = new ReportDataSource();
                rds2.Name = "DataSet2";
                rds2.Value = ControlClass.CNParametros.getCabecalhoRelatorio();

                ReportViewer1.LocalReport.DataSources.Clear();
                //ReportViewer1.LocalReport.DataSources.Add(rds1);
                ReportViewer1.LocalReport.DataSources.Add(rds2);
                ReportViewer1.LocalReport.Refresh();

                #region Gerar PDF
                Warning[] warn = null;
                string[] streamids = null;
                string mimeType = "application/pdf";
                string encoding = string.Empty;
                string extension = string.Empty;
                byte[] byteViewer;

                byteViewer = ReportViewer1.LocalReport.Render("pdf", null, out mimeType, out encoding, out extension, out streamids, out warn);
                Response.Buffer = true;
                Response.Clear();
                Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition", "attachment; filename=Recibo.pdf");
                Response.BinaryWrite(byteViewer);
                Response.Flush();

                Response.End();
                Response.ClearContent();
                #endregion
                //}
            }
            catch (Exception)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", "bootbox.alert('Falha ao tentar gerar o relatório. Tente novamente!', function() {});", true);
            }
        }
    }
}